In application streaming, a server may execute an application and stream video rendered for the application to a remote client device used by a user. The user may then interact with the application based on the video streamed to the client device. The video generated by the server may be captured on the server as video frames, encoded as video bit-streams, and sent to the client for decoding and playback.
To maintain high interactivity, the reduction of latency between content generation at the server and content playback at the client may be desired. Latency in application streaming may lead to unsatisfactory user experiences. For example, latency may cause an application to seem unresponsive or cause lag. Latency may be due to in large part to three factors, server processing time, client processing time, and network transport time. Server processing time and client processing time may be largely dependent on the computational resources available and may not vary much across video frames. However, network transport time may increase as an encoded bit-stream size of a video frame increases for a given network bandwidth.
Video frames containing sudden content changes such as a window popping up in desktop applications or a scene-transition animation between levels in games may be usually difficult to encode due to the amount of new information present in the content. To encode these frames using conventional video coding algorithms, the server may either limit the encoded bit-stream size by degrading the image quality in encoder settings in order to meet latency requirements, or may maintain the quality but sacrifice latency with an increased bit-stream size.